如果object包含字符串数组

时间:2017-03-06 13:02:00

标签: javascript algorithm

在下面的方法中,

self.search = (obj, search) => {
...

第二个参数search是一个搜索字符串数组。第一个是对象。

如果对象包含任何搜索字符串,该算法将在filter方法中使用,该方法返回true

self.search = (obj, search) => {
  return Object.keys(obj).some(k =>
    typeof obj[k] === 'object'
      ? self.search(obj[k], search)
      : search.some(v => String(obj[k]).includes(v))
  )
}

因此,例如,给定以下对象:

{
  name: 'Peter',
  phone: {
    primary: 5556667777,
    mobile: 1112223333
  }
}
对于self.search参数的以下值,

search将返回true:

  • ['Pet']
  • ['Pet', '111']
  • ['Pet', 'asdf']

问题

如果对象包含self.search数组的 元素,那么search如何才能更改为true?

基本上,['Pet', 'asdf']应该返回false

更新

当搜索字符串数组跨越各个级别时,用some替换every不起作用。

// `['Pet']` correctly returns true
// `['Pet', '111']` returns false when it should return true
// `['Pet', 'asdf']` correctly returns false
self.search = (obj, search) => {
  return Object.keys(obj).some(k =>
    typeof obj[k] === 'object'
      ? self.search(obj[k], search)
      : search.every(v => String(obj[k]).toLowerCase().includes(v))
  )
}

1 个答案:

答案 0 :(得分:3)

您可以对阵列的每个项目使用单个搜索功能和元搜索。



@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // initialize the webView here

    // load the url
    final Intent intent = getIntent();
    final String url = intent.getStringExtra("urls");
    webView.loadUrl(url);
 }