javascript - 如何在不更改属性数据类型的情况下推送对象数组?

标签 javascript loops object

function where(collection, source) {
 var arr = [];

 for (var p in collection) {
    for (var x in source) {
        if (collection[p].hasOwnProperty(x)) {
            if (collection[p][x] === source[x]) {
                arr.push(collection[p]);
                break;
            }
            }
        }
    }
for (var i in arr) {
    if (Object.keys(arr[i]).length < Object.keys(source).length) {
        delete arr[i];
    }
}
  return arr;
  }

where([{ "a": 1, "b": 2 }, { "a": 1 }, { "a": 1, "b": 2, "c": 2 }], {"a": 1, "b": 2 });

第一个循环中的 arr.push 将对象放入数组中,但更改了属性,使它们不再是字符串 - 从 "a":1 到 a:1。 我需要属性周围的引号保持完整。

在寻找解决方案时,我发现了一些信息,其中将对象插入数组中,它只是引用对象本身,而不是直接将其复制到数组中。

这里有人有什么想法吗?感谢您的帮助。

最佳答案

Javascript 对象将字符串作为属性。

您可以在推送新对象后通过检查它们的类型来验证这一点。

Object.keys({ "a": 1, "b": 2 })
  .map(prop => typeof prop);
// ["string", "string"]

控制台显示它们时不带引号,因为它已经暗示它们是字符串。

ES2015 引入了计算属性作为替代方案,但它们的语法明显不同。

var str = 'a';
var obj = { [a]: 1 };

关于javascript - 如何在不更改属性数据类型的情况下推送对象数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35499143/

相关文章:

javascript - 如何将 css 属性添加到 jquery 变量伪选择器

javascript - 如何使用键旋转和平移 html 文档中的图像? (javascript)

css - 使用 SASS for 循环定义变量颜色

javascript - 如果当前值不是数组中的值,则打印文本

javascript - 无法访问 AngularJS 中 Javascript 函数返回的对象中的元素

c++ - C++ 中的指针和对象,x86 编译错误

javascript - 如何将 JavaScript 值检查到 Rails 变量中

javascript - 如何运行 OpenAPI -> GraphQL 转换?

Javascript 循环在递归中丢失上下文

javascript - 如何有条件地将属性添加到 javascript 对象文字